home *** CD-ROM | disk | FTP | other *** search
- /* ---------------------------------------------------------------------------
-
- quickcam capture.c
-
- Copyright (c) 1995-6 Adobe Systems Incorporated
- All Rights Reserved
-
- --------------------------------------------------------------------------- */
-
- /**-----------------------------------------------------------------------------
- **
- ** Imports
- **
- **/
-
-
-
- #include "common.h"
-
-
- /**-----------------------------------------------------------------------------
- **
- ** Variables and declarations
- **
- **/
-
-
- typedef struct {
- char *name;
- long version;
- void **suite;
- } ImportBunch;
-
- typedef struct {
- char *name;
- long version;
- } ExportBunch;
-
-
-
- Globals *g;
-
- // Add the properties to import here
- ImportBunch imports[] = {
-
- kAIBlockSuite, kAIBlockVersion, &sBlock,
- kAIMenuSuite, kAIMenuVersion, &sMenu,
- kAIMacMenuSuite, kAIMacMenuVersion, &sMacMenu,
- kAIMacUserSuite, kAIMacUserVersion, &sMacUser,
-
- kAIFixedMathSuite, kAIFixedMathVersion, &sMath,
- kAIArtSuite, kAIArtVersion, &sArt,
- kAIRasterSuite, kAIRasterVersion, &sRaster,
-
- kAIDocumentViewSuite, kAIDocumentViewVersion2, &sDocumentView,
-
- };
- ExportBunch exports[] = {
-
- "hide windows", 1
-
- };
-
-
- AIBlockSuite *sBlock;
- AIMenuSuite *sMenu;
- AIMacMenuSuite *sMacMenu;
- AIMacUserSuite *sMacUser;
-
- AIFixedMathSuite *sMath;
- AIArtSuite *sArt;
- AIRasterSuite *sRaster;
- AIDocumentViewSuite2 *sDocumentView;
-
-
- #include "menuHandler.h"
-
-
- /**-----------------------------------------------------------------------------
- **
- ** Forward Functions
- **
- **/
- static FXErr AcquireProperty( AIPropertyMessage *message );
- static FXErr ReleaseProperty( AIPropertyMessage *message );
-
- static FXErr StartupPlugin( AIPluginMessage *message );
- static FXErr UnloadPlugin( AIPluginMessage *message );
- static FXErr ReloadPlugin( AIPluginMessage *message );
- static FXErr ShutdownPlugin( AIPluginMessage *message );
- static FXErr AboutPlugin( AIPluginMessage *message );
-
- /*******************************************************************************
- **
- ** Exported Functions
- **
- **/
-
- FXErr main( char *selector, void *message );
- FXErr main( char *selector, void *message ) {
-
- PUSH_GLOBALS
- FXErr error = kNoErr;
-
- // standard messages
- if ( strcmp( selector, kSelectorAIAcquireProperty ) == 0 )
- error = AcquireProperty( message );
-
- else if ( strcmp( selector, kSelectorAIReleaseProperty ) == 0 )
- error = ReleaseProperty( message );
-
- else if ( strcmp( selector, kSelectorAIUnloadPlugin ) == 0 )
- error = UnloadPlugin( message );
-
- else if ( strcmp( selector, kSelectorAIReloadPlugin ) == 0 )
- error = ReloadPlugin( message );
-
- else if ( strcmp( selector, kSelectorAIShutdownPlugin ) == 0 )
- error = ShutdownPlugin( message );
-
- else {
- error = acquireSuites( ((AIPluginMessage*)message)->d.basic );
- if ( error )
- goto error;
-
- if ( strcmp( selector, kSelectorAIStartupPlugin ) == 0 )
- error = StartupPlugin( message );
-
- else if ( strcmp( selector, kSelectorAIAboutPlugin ) == 0 )
- error = AboutPlugin( message );
-
- // other messages
- else if ( strcmp( selector, kSelectorAIGoMenuItem ) == 0 )
- error = goMenuItem( message );
-
- releaseSuites( ((AIPluginMessage*)message)->d.basic );
- }
-
- error:
- POP_GLOBALS
- return error;
-
- }
-
-
- static FXErr StartupPlugin ( AIPluginMessage *message ) {
-
- FXErr error = kNoErr;
-
- error = sBlock->AllocateBlock( sizeof(Globals), &g );
- if ( error )
- goto error;
-
- GetIndString( g->menuText, 16000, 1 ); // get the menu text
-
- addMyMenus( (AIMenuMessage*)message );
-
- error:
- return error;
-
- }
-
-
- static FXErr UnloadPlugin( AIPluginMessage *message ) {
-
- CloseVideo();
- message->d.globals = g;
- return kNoErr;
-
- }
-
-
- static FXErr ReloadPlugin( AIPluginMessage *message ) {
-
- g = message->d.globals;
- InitializeVideo();
- return kNoErr;
-
- }
-
-
- static FXErr ShutdownPlugin( AIPluginMessage *message ) {
-
- FXErr error = kNoErr;
-
- error:
- return error;
-
- }
-
-
-
- /**-----------------------------------------------------------------------------
- **
- ** Suite Functions
- **
- **/
-
-
- extern FXErr acquireSuites( AIBasicSuite *sBasic ) {
-
- FXErr error = kNoErr;
- long i;
-
- for ( i = 0; i < sizeof(imports)/sizeof(imports[0]); ++i ) {
-
- if ( imports[i].suite != NULL ) {
- error = sBasic->AcquireSuite( imports[i].name, imports[i].version, imports[i].suite );
- if ( error )
- goto error;
- }
-
- }
-
- error:
- return error;
-
- }
-
-
- extern FXErr releaseSuites( AIBasicSuite *sBasic ) {
-
- FXErr error = kNoErr;
- long i;
-
- for ( i = 0; i < sizeof(imports)/sizeof(imports[0]); ++i ) {
-
- void **procs = imports[i].suite;
-
- if ( procs != NULL && *procs != NULL ) {
- error = sBasic->ReleaseSuite( *procs );
- if ( error )
- goto error;
- *procs = NULL;
- }
-
- }
-
- error:
- return error;
-
- }
-
-
-
-
- /**-----------------------------------------------------------------------------
- **
- ** Other Functions
- **
- **/
-
-
- static FXErr AboutPlugin( AIPluginMessage *message ) {
-
- FXErr error = kNoErr;
-
- Alert( 16000, (ModalFilterUPP)sMacUser->ModalFilterProc );
-
- error:
- return error;
-
- }
-
-
- extern void pstrcopy( unsigned char *from, unsigned char *to ) {
-
- short i;
-
- for(i=0;i<=from[0];i++) {
-
- to[i] = from[i];
-
- }
- }
-
-
-
-
- ////////////////////////
-
-
- static FXErr AcquireProperty( AIPropertyMessage *message ) {
-
- if ( message->vendorID == 'ADBE' &&
- message->propertyKey == 'impt' ) {
-
- long count, i, datalen;
- long strsize;
- char *property;
-
- strsize = 0;
-
- count = sizeof(imports)/sizeof(imports[0]);
- for ( i = 0; i < count; ++i ) {
-
- long len;
-
- len = strlen( imports[i].name ) + 1;
- if ( len & 3 )
- len += 4 - (len & 3);
- strsize += len;
-
- }
-
- datalen = 4 + strsize + count * 8;
- property = NewPtrClear( 16 + datalen );
- if ( property == NULL )
- goto error;
-
- message->property = property;
- message->refCon = 0;
-
- *(OSType *) property = 'ADBE'; // vendor ID
- property += 4;
- *(OSType *) property = 'impt'; // property key
- property += 4;
- *(long *) property = 0; // property ID
- property += 4;
- *(long *) property = datalen; // data len
- property += 4;
-
- *(long *) property = count;
- property += 4;
-
- for ( i = 0; i < count; ++i ) {
-
- long len;
-
- len = strlen( imports[i].name ) + 1;
- if ( len & 3 )
- len += 4 - (len & 3);
-
- *(long *) property = len + 4;
- property += 4;
-
- strcpy( property, imports[i].name );
- property += len;
-
- *(long *) property = imports[i].version;
- property += 4;
-
- }
-
- } else if ( message->vendorID == 'ADBE' &&
- message->propertyKey == 'expt' ) {
-
- long count, i, datalen;
- long strsize;
- char *property;
-
- strsize = 0;
-
- count = sizeof(exports)/sizeof(exports[0]);
- for ( i = 0; i < count; ++i ) {
-
- long len;
-
- len = strlen( exports[i].name ) + 1;
- if ( len & 3 )
- len += 4 - (len & 3);
- strsize += len;
-
- }
-
- datalen = 4 + strsize + count * 8;
- property = NewPtrClear( 16 + datalen );
- if ( property == NULL )
- goto error;
-
- message->property = property;
- message->refCon = 0;
-
- *(OSType *) property = 'ADBE'; // vendor ID
- property += 4;
- *(OSType *) property = 'expt'; // property key
- property += 4;
- *(long *) property = 0; // property ID
- property += 4;
- *(long *) property = datalen; // data len
- property += 4;
-
- *(long *) property = count;
- property += 4;
-
- for ( i = 0; i < count; ++i ) {
-
- long len;
-
- len = strlen( exports[i].name ) + 1;
- if ( len & 3 )
- len += 4 - (len & 3);
-
- *(long *) property = len + 4;
- property += 4;
-
- strcpy( property, exports[i].name );
- property += len;
-
- *(long *) property = exports[i].version;
- property += 4;
-
- }
-
- }
-
- error:
- return kNoErr;
-
- }
-
-
- static FXErr ReleaseProperty( AIPropertyMessage *message ) {
-
- DisposePtr( message->property );
-
- return kNoErr;
-
- }
-